home *** CD-ROM | disk | FTP | other *** search
/ World of Video / World of Video.iso / programs / wb / amigaeyes / eyessource.lha / eyes.c next >
C/C++ Source or Header  |  1994-07-07  |  10KB  |  378 lines

  1. /*****************************************************************************/
  2. /*                                 AmigaEyes                                 */
  3. /*                                                                           */
  4. /*       Author: Stéphane Poirier                                            */
  5. /*               Copyright © 1994 Stéphane Poirier. All right reserved       */
  6. /*                                                                           */
  7. /*****************************************************************************/
  8.  
  9. /*****************************************************************************/
  10. /*                         Programme principal                               */
  11. /*****************************************************************************/
  12.  
  13. #include <exec/types.h>
  14. #include <ctype.h>
  15. #include <intuition/intuition.h>
  16. #include <intuition/classes.h>
  17. #include <intuition/classusr.h>
  18. #include <intuition/imageclass.h>
  19. #include <intuition/gadgetclass.h>
  20. #include <libraries/gadtools.h>
  21. #include <graphics/displayinfo.h>
  22. #include <graphics/clip.h>
  23. #include <graphics/view.h>
  24. #include <graphics/layers.h>
  25. #include <graphics/copper.h>
  26. #include <graphics/regions.h>
  27. #include <graphics/rastport.h>
  28. #include <graphics/gfxbase.h>
  29. #include <graphics/gfxmacros.h>
  30. #include <graphics/gels.h>
  31. #include <graphics/gfxbase.h>
  32. #include <clib/exec_protos.h>
  33. #include <clib/intuition_protos.h>
  34. #include <clib/gadtools_protos.h>
  35. #include <clib/graphics_protos.h>
  36. #include <clib/icon_protos.h>
  37. #include <clib/utility_protos.h>
  38. #include <clib/dos_protos.h>
  39. #include <string.h>
  40. #include <clib/diskfont_protos.h>
  41. #include <stdlib.h>
  42. #include <stdio.h>
  43. #include <math.h>
  44. #include <exec/memory.h>
  45. #include <workbench/workbench.h>
  46. #include <workbench/startup.h>
  47. #include <time.h>
  48.  
  49. #include "eyes.h"
  50.  
  51. struct parametres Parametres;
  52. unsigned int clockInit[2];
  53. USHORT refresh;
  54.  
  55. extern int EyeCloseWindow(int);
  56. void ToolTypesParameters(struct WBArg *);
  57. void ValeursParDefaut(void);
  58.  
  59.  
  60. UBYTE *toolTypes[]=
  61. {
  62.   "AUTOFRONT=ON|OFF",
  63.   "TIMEOUT=n",
  64.   "BACKGROUND=n",
  65.   "BORDER=n",
  66.   "PUPIL=n",
  67.   "EYELIP=n",
  68.   "WINDOW=n",
  69.   "XPOS=n",
  70.   "YPOS=n",
  71.   "PRIORITY=n",
  72.   "REFRESH=n",
  73.   NULL
  74. };
  75.  
  76. struct Library *GfxBase;
  77. struct Library *DosBase;
  78.  
  79. static struct Screen         *Scr = NULL;
  80. static UBYTE                 *PubScreenName = NULL;
  81. static APTR                   VisualInfo = NULL;
  82. static struct Window         *EyeWnd = NULL;
  83. static struct BitMap          SBitmap;
  84. struct IntuiMessage    EyeMsg;
  85. static struct TextFont       *Font       = NULL;
  86. static UWORD                  EyeLeft = 530;
  87. static UWORD                  EyeTop = 2;
  88. static UWORD                  EyeWidth = 94;
  89.  
  90. #ifdef ENTRELACE
  91. static UWORD                  EyeHeight = 40;
  92. #else
  93. static UWORD                  EyeHeight = 21;
  94. #endif
  95.  
  96. static UBYTE                 *EyeWdt = (UBYTE *)"Eyes";
  97.  
  98. /*****************************************************************************/
  99.  
  100. void errorMessage(STRPTR error)
  101. {
  102. if (error)
  103.     printf("Error: %s\n", error);
  104. }
  105.  
  106. /*****************************************************************************/
  107.  
  108. int SetupScreen( void )
  109. {
  110.   if ( ! ( Scr = LockPubScreen( PubScreenName )))
  111.     return( 1L );
  112.  
  113.   if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  114.     return( 2L );
  115.  
  116.   return( 0L );
  117. }
  118.  
  119. /*****************************************************************************/
  120.  
  121. void CloseDownScreen( void )
  122. {
  123.   if ( VisualInfo ) {
  124.     FreeVisualInfo( VisualInfo );
  125.     VisualInfo = NULL;
  126.   }
  127.  
  128.   if ( Scr        ) {
  129.     UnlockPubScreen( NULL, Scr );
  130.     Scr = NULL;
  131.   }
  132.  
  133.   if ( Font       ) {
  134.     CloseFont( Font );
  135.     Font = NULL;
  136.   }
  137. }
  138.  
  139. /*****************************************************************************/
  140.  
  141. int HandleEyeIDCMP( void )
  142. {
  143.   struct IntuiMessage  *m;
  144.   BOOL      running = TRUE;
  145.  
  146.   while( m = GT_GetIMsg( EyeWnd->UserPort )) {
  147.  
  148.     CopyMem(( char * )m, ( char * )&EyeMsg, (long)sizeof( struct IntuiMessage ));
  149.  
  150.     GT_ReplyIMsg( m );
  151.  
  152.     switch ( EyeMsg.Class ) {
  153.  
  154.       case  IDCMP_REFRESHWINDOW:
  155.         GT_BeginRefresh( EyeWnd );
  156.         GT_EndRefresh( EyeWnd, TRUE );
  157.         break;
  158.  
  159.       case  IDCMP_CLOSEWINDOW:
  160.         running = EyeCloseWindow(running);
  161.         break;
  162.  
  163.         break;
  164.     }
  165.   }
  166.   return( running );
  167. }
  168.  
  169. /*****************************************************************************/
  170.  
  171. int OpenEyeWindow( void )
  172. {
  173.   UWORD    offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  174.  
  175.   if ( ! ( EyeWnd = OpenWindowTags( NULL,
  176.         WA_Left,  EyeLeft,
  177.         WA_Top,    EyeTop,
  178.         WA_Width,  EyeWidth,
  179.         WA_Height,  EyeHeight + offy,
  180.         WA_SuperBitMap, &SBitmap,
  181.         WA_IDCMP,  IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|IDCMP_MOUSEMOVE,
  182.         WA_Flags,  WFLG_GIMMEZEROZERO|WFLG_DRAGBAR|WFLG_SUPER_BITMAP|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_REPORTMOUSE|WFLG_ACTIVATE,
  183.         WA_Title,  EyeWdt,
  184.         WA_ScreenTitle,  "                           Big Brother is watching you !",
  185.         WA_PubScreen,  Scr,
  186.         TAG_DONE )))
  187.   return( 0L );
  188.  
  189.   GT_RefreshWindow( EyeWnd, NULL );
  190.  
  191.   return( (int)offy );
  192. }
  193.  
  194. /*****************************************************************************/
  195.  
  196. void CloseEyeWindow( void )
  197. {
  198.   if ( EyeWnd        ) {
  199.     CloseWindow( EyeWnd );
  200.     EyeWnd = NULL;
  201.   }
  202. }
  203.  
  204. /*****************************************************************************/
  205.  
  206. void main(int argc, char **argv)
  207. {
  208. struct WBArg *wbarg;
  209.  
  210. struct WBStartup *WBenchMsg;
  211.  
  212. LONG i;
  213. int ret, offy, depth;
  214. BOOL running = TRUE;
  215. BOOL reveil;
  216.  
  217. if (NULL == (DosBase = OpenLibrary("dos.library", 37)))
  218.   errorMessage( "Requires V37 dos.library");
  219.   else
  220.   {
  221.     if (NULL == (IntuitionBase = OpenLibrary("intuition.library", 37)))
  222.       errorMessage( "Requires V37 intuition.library");
  223.     else
  224.     {
  225.       if (NULL == (GfxBase = OpenLibrary("graphics.library", 37)))
  226.           errorMessage( "Requires V37 graphics.library");
  227.       else
  228.       {
  229.         if (NULL == (GadToolsBase = OpenLibrary("gadtools.library", 37)))
  230.           errorMessage( "Requires V37 gadtools.library");
  231.         else
  232.         {
  233.           if ((ret = SetupScreen()) == NULL)
  234.           {
  235.             ret = timer(clockInit);            /* initialise l'horloge */
  236.  
  237.             ValeursParDefaut();                /* Valeurs par défaut */
  238.  
  239.             WBenchMsg = (struct WBStartup *)argv;     /* Arguments du Wb */
  240.             wbarg = WBenchMsg->sm_ArgList;
  241.  
  242.             for(i = 0; i < WBenchMsg->sm_NumArgs; i++, wbarg++)
  243.               ToolTypesParameters(wbarg);        /* ToolTypes ! */
  244.  
  245.             depth = Scr->RastPort.BitMap->Depth;    /* Initialise ma... */
  246.             InitBitMap(&SBitmap, depth, WNDX, WNDY);    /* superbitmap */
  247.             for (i = 0; i < depth; i++)
  248.               if((SBitmap.Planes[i] = AllocRaster(WNDX, WNDY)) == NULL)
  249.                 printf("erreur\n");
  250.                 
  251.             if ((offy = OpenEyeWindow()) != NULL)    /* Initialise ma fenêtre */
  252.             {
  253.               InitEyes(EyeWnd,&SBitmap);
  254.               InitPlot(EyeWnd,&SBitmap);
  255.               while (running == TRUE)
  256.               {
  257.                 Delay (refresh);
  258.                 running = HandleEyeIDCMP();
  259.                 reveil = DrawingEyes(EyeWnd, &SBitmap, offy);
  260.                 if ((reveil) && (Parametres.autofront))
  261.                 {
  262.                   WindowToFront(EyeWnd);
  263.                 }
  264.               }
  265.               CloseEyeWindow();
  266.               CloseDownScreen(); 
  267.               for (i = 0; i < depth; i++)
  268.                 FreeRaster(SBitmap.Planes[i],WNDX, WNDY);
  269.             }
  270.             else printf("erreur window\n");
  271.           } 
  272.           else printf("erreur screen\n");
  273.              CloseLibrary(GadToolsBase);
  274.         }
  275.         CloseLibrary(GfxBase);
  276.       }
  277.       CloseLibrary(IntuitionBase);
  278.     }
  279.     CloseLibrary(DosBase);
  280.   } 
  281. }
  282.  
  283. /*****************************************************************************/
  284. /*                       Traitement des ToolTypes                            */
  285. /*****************************************************************************/
  286.  
  287. void ToolTypesParameters(struct WBArg *wbarg)
  288. {
  289.   struct DiskObject *dobj;
  290.   char **toolarray;
  291.   char *s;
  292.   struct Task *task;
  293.   UBYTE ancpriorite;
  294.   
  295.   task = FindTask(NULL);
  296.  
  297.   if((*wbarg->wa_Name) && (dobj = GetDiskObject(wbarg->wa_Name)))
  298.   {
  299.     toolarray = (char **)dobj->do_ToolTypes;
  300.     
  301.     if (s = (char *)FindToolType(toolarray,"AUTOFRONT"))
  302.     {
  303.       if(MatchToolValue(s,"ON"))
  304.         Parametres.autofront = TRUE;
  305.       if(MatchToolValue(s,"OFF"))
  306.         Parametres.autofront = FALSE;
  307.      }
  308.  
  309.     if (s = (char *)FindToolType(toolarray,"TIMEOUT"))
  310.     {
  311.         if (isalnum(*s))
  312.           Parametres.timeout = (atoi(s));
  313.      }
  314.     if (s = (char *)FindToolType(toolarray,"BACKGROUND"))
  315.     {
  316.         if (isalnum(*s))
  317.           Parametres.fond = (atoi(s));
  318.      }
  319.     if (s = (char *)FindToolType(toolarray,"BORDER"))
  320.     {
  321.         if (isalnum(*s))
  322.           Parametres.bord = (atoi(s));
  323.      }
  324.     if (s = (char *)FindToolType(toolarray,"PUPIL"))
  325.     {
  326.         if (isalnum(*s))
  327.           Parametres.pupille = (atoi(s));
  328.      }
  329.     if (s = (char *)FindToolType(toolarray,"EYELIP"))
  330.     {
  331.         if (isalnum(*s))
  332.           Parametres.paupiere = (atoi(s));
  333.      }
  334.     if (s = (char *)FindToolType(toolarray,"WINDOW"))
  335.     {
  336.         if (isalnum(*s))
  337.           Parametres.fenetre = (atoi(s));
  338.      }
  339.     if (s = (char *)FindToolType(toolarray,"XPOS"))
  340.     {
  341.         if (isalnum(*s))
  342.           EyeLeft = (atoi(s));
  343.      }
  344.     if (s = (char *)FindToolType(toolarray,"YPOS"))
  345.     {
  346.         if (isalnum(*s))
  347.           EyeTop = (atoi(s));
  348.      }
  349.     if (s = (char *)FindToolType(toolarray,"PRIORITY"))
  350.     {
  351.         if ((isalnum(*s)) || ((*s) = '-') || ((*s) = '+'))
  352.           ancpriorite = SetTaskPri(task,atoi(s));
  353.      }
  354.     if (s = (char *)FindToolType(toolarray,"REFRESH"))
  355.     {
  356.         if (isalnum(*s))
  357.           Parametres.refresh = (atoi(s));
  358.      }
  359.        
  360.     FreeDiskObject(dobj);
  361.   }
  362. }
  363.  
  364. /*****************************************************************************/
  365.  
  366. void ValeursParDefaut(void)
  367. {
  368.   Parametres.autofront = FALSE;
  369.   Parametres.timeout = 30;
  370.   Parametres.pupille = 1;
  371.   Parametres.bord = 1;
  372.   Parametres.fond = 2;
  373.   Parametres.paupiere = 3;
  374.   Parametres.fenetre = 0;
  375.   Parametres.refresh = 2;
  376.   refresh = SLEEP;
  377. }
  378.